Regras em script
Nesta seção:
Sobre as regras em script
As regras em script permitem que regras personalizadas sejam criadas usando-se scripts do Windows PowerShell ou em VB. O sucesso ou falha do script determina se o nível de segurança, os itens permitidos e os itens negados que fazem parte da regra serão aplicados ao usuário.
As regras em script podem utilizar qualquer interface acessível via PowerShell ou VBScript, como COM (Component Object Model).
Cada script é avaliado sob as seguintes circunstâncias:
- Quando uma nova configuração é implantada no computador;
- Quando um usuário faz logon.
Para criar ou editar scripts, acesse o Conjunto de Regras em Script desejado no Editor de Configuração do Controle de Aplicativos. Conjuntos de Regras > Em Script > [Nome do Conjunto de Regras]
Você pode definir quando o script será executado usando as seguintes opções da Regra em Script:
- Executar script:
- Por sessão como usuário - o script é executado para cada usuário que faz logon. As configurações são aplicadas somente enquanto durar a sessão do usuário.
- Por sessão como SISTEMA - o script é executado com permissões da conta SYSTEM uma única vez para cada usuário que faz logon. As configurações são aplicadas somente enquanto durar a sessão do usuário.
- Por computador como SISTEMA - o script é executado com permissões da conta SYSTEM uma única vez na inicialização do computador. As configurações são aplicadas a todas as sessões de usuário até que o computador seja reiniciado, o agente do Controle de Aplicativos seja reiniciado ou haja uma mudança de configuração.
- Aguardar conclusão do logon - selecione para impedir a execução do script até que o logon do usuário esteja concluído.
Cuidado: a execução de scripts como usuário SYSTEM pode causar sérios danos ao seu computador e só deve ser habilitada por autores de script experientes.
VBScripts
Cada script é executado em um mecanismo hospedado, o que permite maior controle sobre a execução dele e fornece alto grau de controle quanto a entradas e saídas.
- Nenhum arquivo VBS é usado.
- Nenhum processo separado é gerado.
Um script deve ser escrito como uma função e pode conter várias funções, mas é necessário especificar uma função inicial principal. A função inicial é executada pelo agente do Controle de Aplicativos e pode ser usada para chamar outras funções.
O objeto COM AMScriptRule está incorporado ao mecanismo de script e fornece acesso aos seguintes métodos:
strUsername = AMScriptRule.UserName
strUserdomain = AMScriptRule.UserDomain
strSessionid = AMScriptRule.SessionID
strStationname = AMScriptRule.WinStation
O padrão da Microsoft nessa instância significa que WinStation retorna o valor do nome da Sessão de Serviços de Terminal, que é determinado pelo tipo de sessão, com os valores típicos sendo "Console" ou "RDP-Tcp#34", em vez do nome da Estação Windows, que normalmente é WinSta0.
O objeto COM AMScriptRule também inclui os seguintes métodos:
strLog = AMScriptRule.Log "My Log Statement"
Permite enviar strings de log ao arquivo de log do agente para uso com regras de depuração em script.
strEnvironmentvar = AMScriptRule.ExpandEnvironment ("%MyEnvironmentVariables%")
Expande as variáveis de ambiente do usuário que está executando o script.
Usar WScript.shell para expandir variáveis de ambiente retorna apenas variáveis SYSTEM.
Scripts do Windows PowerShell
Se o script retornar (sair) com valor 0, o script será aprovado, e as regras serão aplicadas. Se for retornado um valor diferente de zero, o script falhará, e as regras não serão aplicadas.
Cada script do PowerShell é executado em uma instância do PowerShell.exe e, sendo assim, o Controle de Aplicativos não impõe nem adiciona nenhuma sintaxe específica – todo PowerShell corretamente formatado vai funcionar.
O PowerShell deve estar instalado em todos os pontos de extremidade que usarão o script.
Scripts de exemplo
O VBScript a seguir demonstra como controlar os aplicativos aos quais o usuário tem acesso.
Function ScriptedRule()
’Name of Filter scan expected to pass
ExpectedFilter = "FWALL"
’Get Server Name
Set objNTinfo = CreateObject ("WinNTSystemInfo")
ServerName = lcase (objNTInfo.ComputerName)
’Set initial return value
ScriptedRule = False
’Create MetaFrame Session Object
Set MFSession = Createobject ("MetaFrameCOM.MetaFrameSession")
’Initialize the session filters for this session
For Each x in MFSession.SmartAccessFilters
’return true if our filter is found
If x = ExpectedFilter Then
ScriptedRule=True
AMScriptRule.Log "SmartAccessFilter match found."
End If
Next
End Function
O VBScript a seguir pode ser usado para determinar se um computador está em uma Unidade Organizacional de Computadores:
Function ScriptedRule()
ScriptedRule = vbFalse
strCompName = AMScriptRule.StationName
Set oRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = oRootDSE.Get("DefaultNamingContext")
Set oOU = GetObject("LDAP://OU=TheOUyouAreSearching,OU=Parent,OU=Parent," & strDNSDomain)
oOU.GetInfo
For each member in oOU
If UCase(strCompName) = UCase(member.CN) Then
ScriptedRule = vbTrue
Exit For
End If
Next
End Function
O VBScript de exemplo abaixo mostra os principais componentes de um script e demonstra como acessar as informações sobre o nome do usuário que faz logon no sistema e como fazer a correspondência com um domínio e unidade organizacional específicos:
Function MyScript()
'Get the username of the user logging in (also works when running as SYSTEM)
strUserName = AMScriptRule.UserName
'Get the domain of the user logging in (also works when running as SYSTEM)
strUserDomain = AMScriptRule.UserDomain
'Look up user environment variables (when running as SYSTEM, only SYSTEM variables are available)
strClientName = AMScriptRule.ExpandEnvironment ("%ClientName%")
'Log the output
AMScriptRule.Log strUserName & " logged in on " & strClientName
'Check if the user is a member of the domain
If strUserdomain = "MyDomain" Then
'If so, see if the user is in the MyOU OU
Set objOU = GetObject ("LDAP://ou=MyOU,dc=MyDomain,dc=com")
objOU.Filter = Array("user")
For Each objUser In objOU
'Check if there is a match with the user logging on
If objUser.sAMAccountName = strUserName Then
'if there is, then set the function to True
MyScript = True
End If
Next
End If
'Unless there is a username match, the function defaults to False
End Function
O script do Windows PowerShell abaixo mostra os principais componentes de um script e demonstra como acessar as informações sobre o nome do usuário que faz logon no sistema e como fazer a correspondência com um domínio e unidade organizacional específicos:
#Script checks if the current user is a member of the OU specified
# Return 0 if TRUE
# 1 otherwise
$logonuser = $env:username
$bindpt = [adsi] "LDAP://OU=TS_Users,OU=Users,OU=MyUser,OU=MyOU,DC=MyDomain,DC=com"
$users = New-Object System.DirectoryServices.DirectorySearcher $bindpt
$users.Filter = "(&(objectClass=User)(sAMAccountName=$logonuser))"
$obj = $users.FindOne()
if($obj -eq $null)
{
#" Not a Member"
exit 1
}